#include<iostream>
#include<memory>
/**
s.get():返回shared_ptr中保存的裸指针。
s.reset(…):重置shared_ptr，将指针s释放并置空，引用计数减一。如果reset带了输入参数（一个对象），则指针释放并重新指向该对象，原对象对应的引用计数减一。
s.use_count():返回shared_ptr的引用计数。
s.unique():如果use_count为1，则返回true,否之返回false。
**/
int main(void){
	using namespace std;
	std::shared_ptr<int> p1(new int(1));
	std::shared_ptr<int> p2 = p1;
	cout<<p1.use_count()<<" "<<p2.use_count()<<endl;
	
	p2.reset(new int(100));
	cout<<p1.use_count()<<" "<<p2.use_count()<<endl;
	
	//shared_ptr<int> sp1 = make_shared<int>(200);--效率更高
	
	//shared_ptr、unique_ptr指向一个数组的方式
	std::shared_ptr<int[]> ptr1(new int[10]{1,2,3,4,5,6,7,8,9,10}, [](int *p){delete [] p;}); // 正确
    std::unique_ptr<int[], void(*)(int*)> ptr2(new int[10]{1,2,3,4,5,6,7,8,9,10}, [](int *p){delete [] p;}); //正确
	cout<<ptr1[9]<<" "<<ptr2[9]<<endl;

 return 0;
}
